ARM 汇编指令集 |
您所在的位置:网站首页 › arm 汇编指令 STRD › ARM 汇编指令集 |
寄存器
寄存器的寄存器用于数据处理及控制。 如内存中数据处理,需先从内存中加载数据到寄存器中,处理完毕后,再把寄存器的数据存放到内存中。 寄存器组拥有16个寄存器,R0R12是通用寄存器,R13R15是特殊寄存器。 寄存器作用commentR0~R7通用寄存器-Low register16 bits 指令R8~12通用寄存器-Hig Register16 bits 指令 + 32 bits 指令R13Stack Pointer-SPMSP:(Main stack pointer) 复位默认的SP指针,PSP:(Process stack pointer):进入线程后的指针R14Link Register-LC函数调用时,会首先将LC的值存入堆栈中,用于保存返回地址,当调用函数完毕后,将LC的值赋给PC。R15Program conutner当前执行指令的地址Thumb2 指令集:可以16bits指令与32位指令的混合使用。 ARM汇编指令语法格式: label mnemonic operand1, operand2, ....;comments label 标签用以表示一个参考地址。 Label放在指令前,Label用以表达指令的地址。 Label也可以用以表达数据的地址。 mnemonic 助记符,助记符是指令的名字,。 operand 操作数有,操作可以是立即数,也可以是寄存器,操作数的个数视具体汇编指令。 ;comment 注释 eg: MOVS R0, #0x12 ; Set R0 = 0x12 (hexadecimal) MOVS R1, #’A’ ; Set R1 = ASCII character A 后缀ARM处理器汇编器中,一些指令支持带后缀,常用的后缀如下: 后缀简写备注S需要更新APSR标志EQEqualNENot EqualLTLesser ThanGTGreat Than.N使用16位指令集.W使用32位指令集 汇编指令集:1 Moving data within the processor 数据拷贝 MOV R4, R0 ; 从R0拷贝数据到R4。 MOV R4,[R0]; 从R0数据指向的地址中读取数据到R4; MOVS R4, R0; 从R0拷贝数据到R4,更新APSR。 MOVS R4, [R0}; 从R0数据指向的地址中拷贝数据到R4,更新APSR。 eg: MOV R4, #0x34; R4的值设置为0x34 MOVS R4, #0x34; R4的值设置为0x34,更新APSR (move word指令) MOVW R4, #0x1234; 把16位立即数放到寄存器的低16位,高16位清零 。(若执行指令前R4的值为全为F,执行完毕后,R4的值为0x00001234) MOVT R4, #0x1234; 把16位立即数放到寄存器的高16位,低16位不变。(若执行指令前R4的值为0x00001234,执行完毕后,R4的值为0x12341234) MVN R4, R0; 对R0按位取反,然后放入R4中。 MSR CONTROL, R2; 把状态寄存器的值放到通用寄存器中。 MRS R2, CONTROL; 把通用寄存器的值放到状态寄存器中。Notes: 移动8bits内的数据使用MOV指令; 移动8bits~16bits的数据使用MOVW/MOVT指令 移动32bits的数据;使用LDR指令;如LDR R0. 0x12345678;Set R0 to 0x12345678 2 Memory access 内存访问 根据数据的传输方向,传输数据的大小,有如下的指令。 3 Arithmetic operations 算数操作 算数加 addition ADD R0, R0, R2 ; R0 = R0 + R2 ADDS R0, R0, R2 ; R0 = R0 + R2,更新APSR ADD RO, R1,#0x5; RO = R0 +5; ADDS RO, R1,#0x4‘ RO = R0 +5;更新APSR ADC(ADD with carry) ADC RO,R1, R2; R0 = R1 + R2 + carry ADC R0, #0x3; R0 = R0 + 3 + carry 算数减 subtraction SUB R0, R1, R2; R0 = R1 - R2 SUB R0, #3; R0 = R0 -3 SUB R0, R1, #5; R0 = R1 -5 SBC R0, R1, R2; R0 = R1 - R2 - borrow 逆向算数减 Reserve subtraction RSB R0, R1, R2; R0 = R2 - R1 RSB R0, R1, #0x55; R0 = 0x55 - R1 算数乘 multiply MUL RO, R1, R2 ; R0 = R1 * R2 算数除法 divide UDIV R0, R1, R2; R0 = R1/R2 (unsigned) SDIV R0, R1, R2; R0 = R1/R2 (Signed)4 Logic opeations 逻辑操作 逻辑按位与 & and AND R0, R1; R0 = R0 & R1 AND R0, R1, R2; R0 = R1 & R2 AND R0, R1, #3; R0 = R1 & 3 按位或 | or ORR R0, R1; R0 = R0 | R1 ORR R0, R1, R2; R0 = R1 | R2 ORR R0, R1, #3 R0 = R1 | 3 按位清除 bit clear BIC R0, R1; R0 = R0 & ~R1 BIC R0, R1, R2; R0 = R1 & ~R2 BIC R0, R1, #3; R0 = R1 &~3 按位异或 bitwise exclusive or EOR R0,R1; R0 = R0 ^ R1;5 Shift and rotate instruction 移动旋转操作 算术右移 Arithmetic shift right ASR R0, R1; R0 = R0 >> R1 ASR R0, R1, R2 R0 = R1 >> R2 ASR R0, R1, #0x3 R0 = R1 >> 0x3 逻辑右移动 Logic shift right LSR R0, R1; R0 = R0 >> R1 LSR R0, R1, R2; R0 = R1 >> R2 LSR R0, R1, #0x3 R0 = R1 >> 3 逻辑左移动 Logic Shift Left LSL R0, R1; R0 = R0 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |